{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "核心区别：\n",
    "- 并发(concurrent)：逻辑上的同时执行\n",
    "- 并行(parallel)：物理上的同时执行"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 单核场景"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 时间片机制：\n",
    "  - 操作系统将CPU资源划分为时间片（如10ms）\n",
    "  - 每个任务（进程/线程）轮流占用CPU时间片\n",
    "  - 物理上是串行执行，但快速切换给人同时执行的错觉\n",
    "- 并发特点：\n",
    "  - 任务切换带来上下文切换开销\n",
    "  - 适合IO密集型场景（任务经常等待IO）\n",
    "  - 示例：单核CPU上运行多个浏览器标签页"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 多核场景"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 并行执行：\n",
    "  - 不同CPU核心可同时执行不同任务\n",
    "  - 真物理并行，无时间片切换开销\n",
    "  - 适合CPU密集型计算场景\n",
    "- 调度优化：\n",
    "  - 任务绑定核心可提高CPU缓存命中率\n",
    "  - 避免频繁跨核心切换导致缓存失效\n",
    "- 实际应用：\n",
    "  - 现代服务器多为多核/多CPU架构\n",
    "  - 并行编程需考虑数据竞争和同步问题\n",
    "- 关键记忆点：\n",
    "  - 并发：单核时间片轮转（逻辑并行）\n",
    "  - 并行：多核真正同时执行（物理并行）\n",
    "  - 实际开发中\"并发编程\"通常包含两者概念\n",
    "- 性能考量：\n",
    "  - 多线程不一定总是更好\n",
    "  - 需根据任务类型（IO密集/CPU密集）选择方案\n",
    "  - 线程过多会导致上下文切换开销增大"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "C++17",
   "language": "C++17",
   "name": "xcpp17"
  },
  "language_info": {
   "name": "C++17"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
